package CollectionDemo.StackImplement;
/*
数组是数据结构的基础，之所以这么说是因为数组反映了内存的物理结构本身。 在内存中存储数据的空间是连续分布的。
而在程序中，往往要从内存整体中分配出一块连续的空间以供使用。
如果用程序中的语句表示这种分配使用方式的话，就要用到数组。
然鹅要实现栈这种数据结构，底层的物理结构我们是无法改变啦，所以只有从逻辑上来改变
 */
public class MyStack implements IStack {

    int[] arr = new int[5];
    int topIndex = -1;
    @Override
    public boolean push(Integer integer) {
        if (!isFull()) {
            arr[++topIndex] = integer;
            System.out.println("入栈成功");
            return true;
        }
        System.out.println("入栈失败");
        return false;
    }

    @Override
    public Integer pop() {
        Integer result = -1;
        if (!isEmpty()) {
            result = arr[topIndex--];
            System.out.println("出栈成功，出栈元素是：" + result);
            return result;
        }
        System.out.println("出栈失败");
        return null;
    }

    @Override
    public boolean isEmpty() {
        return topIndex == -1;
    }

    @Override
    public boolean isFull() {
        return topIndex == (arr.length - 1);
    }

    @Override
    public String toString() {
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append("[");
        for (int i = topIndex; i > 0; i--) {
            stringBuffer.append(arr[i]);
            stringBuffer.append(",");
        }
        stringBuffer.append(arr[0]);
        stringBuffer.append("]");
        return stringBuffer.toString();
    }
}
